home *** CD-ROM | disk | FTP | other *** search
- /* VERSION 0001 (DATE: 28.III.85) (TIME: 9:54 am) */
- /*
- e (qe) screen editor
-
- (C) G. Nigel Gilbert, MICROLOGY, 1981
-
- August-December 1981
- Modified: To QE from e (ver 4.6a) by J.W. Haefner -- Oct 84-Mar 85
-
- FILE: qe10
-
- FUNCTIONS: fopen,fcreat,fflush,fclose,putc,getc,funlink,
- frename,dskcheck,err1,err2,err3,err4
-
- PURPOSE: file buffer operations extracted and stripped from stdlib1,
- with protection from bdos error crashes added
-
- */
-
- #include "qe.h"
-
- int fopen(filename,iobuf)
- struct iobuffer *iobuf;
- char *filename;
- {
- if (dskcheck(setjmp(dskerr)) || (iobuf -> _fd = open(filename,0))<0) return FAIL;
- iobuf -> _nleft = 0;
- return iobuf -> _fd;
- }
-
- int fcreat(name,iobuf)
- char *name;
- struct iobuffer *iobuf;
- {
- if (dskcheck(setjmp(dskerr)) || (iobuf -> _fd = creat(name)) < 0 ) return FAIL;
- iobuf -> _nextp = iobuf -> _buff;
- iobuf -> _nleft = (NSECTS * SECSIZ);
- return iobuf -> _fd;
- }
-
- int fflush(iobuf) /*does NOT allow more writing*/
- struct iobuffer *iobuf;
- {
- int i;
-
- if (iobuf -> _nleft == (NSECTS * SECSIZ)) return YES;
-
- i = NSECTS - iobuf->_nleft / SECSIZ;
- if (dskcheck(setjmp(dskerr)) || write(iobuf -> _fd, iobuf -> _buff, i) != i) return FAIL;
- return YES;
- }
-
- int fclose(iobuf)
- struct iobuffer *iobuf;
- {
- if (dskcheck(setjmp(dskerr))) return FAIL;
- return close(iobuf -> _fd);
- }
-
- putc(c,iobuf) /*stripped down version of standard putc*/
- char c;
- struct iobuffer *iobuf;
- {
- if (iobuf -> _nleft--) return *iobuf -> _nextp++ = c;
- if (dskcheck(setjmp(dskerr)) || (write(iobuf -> _fd, iobuf -> _buff, NSECTS)) != NSECTS) return FAIL;
- iobuf -> _nleft = (NSECTS * SECSIZ -1);
- iobuf -> _nextp = iobuf -> _buff;
- return *iobuf -> _nextp++ = c;
- }
-
- int getc(iobuf) /*the standard getc, trimmed for speed*/
- struct iobuffer *iobuf;
- {
- int nsecs;
-
- if (iobuf -> _nleft--) return *iobuf -> _nextp++;
- if (dskcheck(setjmp(dskerr)) || (nsecs = read(iobuf -> _fd, iobuf -> _buff, NSECTS)) <= 0)
- return iobuf -> _nleft++;
- iobuf -> _nleft = nsecs * SECSIZ - 1;
- iobuf -> _nextp = iobuf -> _buff;
- return *iobuf->_nextp++;
- }
-
- funlink(name)
- char *name;
- {
- if (dskcheck(setjmp(dskerr))) return FAIL;
- return unlink(name);
- }
-
- frename(oldname,newname)
- char *oldname,*newname;
- {
- if (dskcheck(setjmp(dskerr))) return FAIL;
- return rename(oldname,newname);
- }
-
- dskcheck(errtype)
- int errtype;
- {
- switch(errtype) {
- case 0:
- return 0;
- case 1:
- error("Bad sector");
- break;
- case 2:
- error("Bad disk select");
- break;
- case 3:
- error("Disk is read only");
- break;
- case 4:
- error("File is read only");
- break;
- }
- bdos(RESETDSK);
- bdos(SELDSK,curdsk);
- return FAIL;
- }
-
- err1()
- {
- longjmp(dskerr,1);
- }
-
- err2()
- {
- longjmp(dskerr,2);
- }
-
-
- err3()
- {
- longjmp(dskerr,3);
- }
-
- err4()
- {
- longjmp(dskerr,4);
- }
- me)) < 0 ) return FAIL;
- iobuf -> _nextp = iobuf -> _buff;
-